{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第二步：调整树的参数：max_depth & min_child_weight# 第二步：调整树的参数：max_depth & min_child_weight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 49352 entries, 0 to 49351\n",
      "Columns: 228 entries, bathrooms to interest_level\n",
      "dtypes: float64(9), int64(219)\n",
      "memory usage: 85.8 MB\n"
     ]
    }
   ],
   "source": [
    "dpath = './data/'\n",
    "dtrain = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "dtrain.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = dtrain['interest_level']\n",
    "train = dtrain.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)\n",
    "\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第一轮参数调整得到的n_estimators最优值（216），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'subsample': [0.8, 0.9, 1.0], 'colsample_bytree': [0.3, 0.4, 0.5, 0.6]}\n"
     ]
    }
   ],
   "source": [
    "# max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "#max_depth = [6,7,8]\n",
    "#min_child_weight = [4,5,6]\n",
    "subsample = [0.8, 0.9, 1.0]\n",
    "colsample_bytree = [i/10.0 for i in range(3,7)]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "print(param_test3_1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58492, std: 0.00347, params: {'colsample_bytree': 0.3, 'subsample': 0.8},\n",
       "  mean: -0.58416, std: 0.00368, params: {'colsample_bytree': 0.3, 'subsample': 0.9},\n",
       "  mean: -0.58330, std: 0.00357, params: {'colsample_bytree': 0.3, 'subsample': 1.0},\n",
       "  mean: -0.58324, std: 0.00307, params: {'colsample_bytree': 0.4, 'subsample': 0.8},\n",
       "  mean: -0.58269, std: 0.00310, params: {'colsample_bytree': 0.4, 'subsample': 0.9},\n",
       "  mean: -0.58214, std: 0.00383, params: {'colsample_bytree': 0.4, 'subsample': 1.0},\n",
       "  mean: -0.58282, std: 0.00387, params: {'colsample_bytree': 0.5, 'subsample': 0.8},\n",
       "  mean: -0.58241, std: 0.00371, params: {'colsample_bytree': 0.5, 'subsample': 0.9},\n",
       "  mean: -0.58221, std: 0.00393, params: {'colsample_bytree': 0.5, 'subsample': 1.0},\n",
       "  mean: -0.58154, std: 0.00361, params: {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  mean: -0.58159, std: 0.00356, params: {'colsample_bytree': 0.6, 'subsample': 0.9},\n",
       "  mean: -0.58243, std: 0.00434, params: {'colsample_bytree': 0.6, 'subsample': 1.0}],\n",
       " {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       " -0.5815368321744773)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=216,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3,\n",
    "        nthread=-1)\n",
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold, return_train_score=True)\n",
    "gsearch3_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_, gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([120.48159213, 122.18955631, 119.5161325 , 146.95247412,\n",
       "        147.29177766, 143.62120881, 171.14465518, 170.01444774,\n",
       "        166.2600563 , 194.19459639, 186.96676273, 165.83432374]),\n",
       " 'mean_score_time': array([0.56029134, 0.55628057, 0.54745708, 0.56169505, 0.5647028 ,\n",
       "        0.53442216, 0.56049185, 0.54124045, 0.53783159, 0.54404817,\n",
       "        0.50614681, 0.43415527]),\n",
       " 'mean_test_score': array([-0.58491995, -0.58415572, -0.58329762, -0.58323871, -0.58268725,\n",
       "        -0.58214246, -0.58282385, -0.58240514, -0.58220593, -0.58153683,\n",
       "        -0.5815896 , -0.58242718]),\n",
       " 'mean_train_score': array([-0.49476424, -0.49372875, -0.49326316, -0.48650726, -0.48601832,\n",
       "        -0.4885999 , -0.48117776, -0.48123313, -0.4843695 , -0.47749854,\n",
       "        -0.47886639, -0.48483269]),\n",
       " 'param_colsample_bytree': masked_array(data=[0.3, 0.3, 0.3, 0.4, 0.4, 0.4, 0.5, 0.5, 0.5, 0.6, 0.6,\n",
       "                    0.6],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_subsample': masked_array(data=[0.8, 0.9, 1.0, 0.8, 0.9, 1.0, 0.8, 0.9, 1.0, 0.8, 0.9,\n",
       "                    1.0],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'colsample_bytree': 0.3, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.3, 'subsample': 0.9},\n",
       "  {'colsample_bytree': 0.3, 'subsample': 1.0},\n",
       "  {'colsample_bytree': 0.4, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.4, 'subsample': 0.9},\n",
       "  {'colsample_bytree': 0.4, 'subsample': 1.0},\n",
       "  {'colsample_bytree': 0.5, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.5, 'subsample': 0.9},\n",
       "  {'colsample_bytree': 0.5, 'subsample': 1.0},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.9},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 1.0}],\n",
       " 'rank_test_score': array([12, 11, 10,  9,  7,  3,  8,  5,  4,  1,  2,  6]),\n",
       " 'split0_test_score': array([-0.57898283, -0.5775963 , -0.57676021, -0.57812476, -0.57788674,\n",
       "        -0.57608291, -0.57687487, -0.57714958, -0.57623352, -0.57552558,\n",
       "        -0.5758057 , -0.57577566]),\n",
       " 'split0_train_score': array([-0.49741114, -0.49581185, -0.49409074, -0.48881157, -0.48670144,\n",
       "        -0.48899804, -0.48197346, -0.48240519, -0.48548322, -0.47824101,\n",
       "        -0.48032937, -0.48584371]),\n",
       " 'split1_test_score': array([-0.58407052, -0.58382849, -0.58265847, -0.58210451, -0.58199975,\n",
       "        -0.58078304, -0.58056198, -0.58004296, -0.58040505, -0.57970948,\n",
       "        -0.57983545, -0.58049849]),\n",
       " 'split1_train_score': array([-0.49548493, -0.49326808, -0.49390689, -0.48565524, -0.48643142,\n",
       "        -0.48833081, -0.4805244 , -0.48002252, -0.48436786, -0.47698223,\n",
       "        -0.47847624, -0.48497498]),\n",
       " 'split2_test_score': array([-0.5849613 , -0.58406582, -0.5841964 , -0.58322535, -0.58150317,\n",
       "        -0.58134986, -0.58287457, -0.58173017, -0.58134823, -0.58274539,\n",
       "        -0.58185128, -0.58157194]),\n",
       " 'split2_train_score': array([-0.49439107, -0.49305058, -0.4922889 , -0.48559223, -0.48585089,\n",
       "        -0.48851446, -0.48262523, -0.48153308, -0.48360479, -0.4765204 ,\n",
       "        -0.47871693, -0.48266721]),\n",
       " 'split3_test_score': array([-0.58915573, -0.58730236, -0.58628078, -0.58665411, -0.5854277 ,\n",
       "        -0.58590398, -0.58614321, -0.58599945, -0.58613741, -0.58377784,\n",
       "        -0.58492252, -0.58647628]),\n",
       " 'split3_train_score': array([-0.49520347, -0.49515326, -0.49417097, -0.48620517, -0.48588287,\n",
       "        -0.48920802, -0.48068159, -0.4810185 , -0.48521482, -0.47881992,\n",
       "        -0.4800193 , -0.48478678]),\n",
       " 'split4_test_score': array([-0.58743013, -0.5879868 , -0.58659324, -0.58608566, -0.5866201 ,\n",
       "        -0.58659387, -0.58766609, -0.58710496, -0.58690685, -0.5859272 ,\n",
       "        -0.58553422, -0.58781517]),\n",
       " 'split4_train_score': array([-0.4913306 , -0.49135996, -0.4918583 , -0.48627209, -0.48522498,\n",
       "        -0.48794819, -0.48008412, -0.48118634, -0.48317678, -0.47692913,\n",
       "        -0.47679012, -0.48589077]),\n",
       " 'std_fit_time': array([0.79084976, 1.46688494, 1.03047584, 0.60861683, 2.23752539,\n",
       "        0.96105504, 0.73892125, 0.53749255, 0.97083687, 0.37498219,\n",
       "        4.9746402 , 6.82218106]),\n",
       " 'std_score_time': array([0.02894491, 0.01419979, 0.01852099, 0.01268915, 0.02278841,\n",
       "        0.00938448, 0.01343722, 0.00535801, 0.00684768, 0.00898161,\n",
       "        0.0362817 , 0.00608263]),\n",
       " 'std_test_score': array([0.00347037, 0.0036802 , 0.00356973, 0.00307277, 0.003095  ,\n",
       "        0.0038251 , 0.00387226, 0.00370571, 0.00392942, 0.00361194,\n",
       "        0.00355715, 0.00433858]),\n",
       " 'std_train_score': array([0.0019823 , 0.00159071, 0.0009845 , 0.00118487, 0.00051246,\n",
       "        0.00045448, 0.0009589 , 0.00077169, 0.0008902 , 0.00087691,\n",
       "        0.00126135, 0.00117076])}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.581537 using {'colsample_bytree': 0.6, 'subsample': 0.8}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\ni+KKar7Yd4rVbsFZuuMExsCwpAimDYhl2sBYhnQNw2ZTRwGl9Vi8eDE7d+5k27ZtrFixgvfff58N\nGzYgIsybN4+1a9eSk5ND165d+fjjjwEoKCggPDycP/3pT6xevZqYmJhG587JyeHuu+9m7dq19OrV\ni9xcK3rg0UcfZcSIEfz73/9m1apV3HrrrWzbtq3e2Mcff5xPPvmExMRE8vPzAYiNjSUtLY2AgAD2\n7dvHd7/7XU/S2m+++Yb09HSioqLo3bs3d911Fxs2bOCZZ57hueee4+mnnwYsK+Kzzz7jwIEDTJ06\nlf3799f73N/97ndMmzaN1157jfz8fMaOHcuVV15JcHBwo8+4YcMGdu7cSVBQEGPGjGHu3Lnceeed\nLFiwgAceeACXy8U777zDhg0bGDZsGE899RQfffQRYG2xrV+/nu3btxMVFcWKFSvYt2/fGd9/ly5d\nePfdd1m3bh1Op5Mf/OAHvPXWW9x6663cdddd3HfffYwePZrs7GwSEiwH3YSEBE6ePNnomo8ePcrc\nuXPZv38/Tz75JF27dj37D8kFoALjY0L8HcwaGs+sofG4XMLurEJW7TnJqj0neXrlXv786V66hPoz\ndUAXpg2M5Yp+XQjx1/8snZmzWRqXghUrVrBixQpGjBgBQHFxMfv27WPixIn8/Oc/56GHHuKqq65i\n4sSJzZrvq6++YtKkSZ5gvaioKAC++OIL/vWvfwEwbdo0Tp8+TUFBQb2xEyZMYOHChdxwww0sWLAA\nsLIe3H///Wzbtg273c7evXs9/ceMGeP55dqnTx9mzJgBQHJycj3r6oYbbsBms9GvXz969+7Nnj17\nzvgOlixZwlNPPQVYcUpHjhxh0KBBjT5jamoq0dHRACxYsIAvvviCH//4x0RHR7N161ays7MZMWKE\np09j42u/l6a+/+3bt7N582bGjBkDQFlZGbGxsQC8+uqrjc57Nrp168b27ds5fvw41157Ld/5zneI\ni4s773nOhv4mu4TYbIahieEMTQznR9P7caq4gs++zWHVnpMs23GCf27KxGk3jOsVzdSBlnXTK6bx\nv5gUxVeICA8//DD33nuGIyebN29m6dKlPPzww8yYMYNf/epXjcxw5nyNufI3FqbWsN9LL73E119/\nzccff0xKSgrbtm3jueeeIy4ujm+++QaXy0VAQICnv79/3dazzWbz3NtstnrnGw0/p+G9iPCvf/2L\n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\nhizeH6YUoQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1b1ef5876d8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3_1.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "结果跟预制的相同，所以不需要对若分类器数调整"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
